package org.example.studentmanager.dao;

import jakarta.persistence.criteria.CriteriaBuilder;
import org.apache.ibatis.annotations.Param;
import org.example.studentmanager.entity.Clazz;
import org.example.studentmanager.entity.Student;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface ClassDao {

    // 根据教师id查找班级
    List<Clazz> findAClazzByTeacherId(@Param("id") Integer id);

    /**
     * 根据多id查询学生信息
     * @param id 教师id
     * @param courseName 课程id
     * @return 学生信息列表
     */
    List<Clazz> findAClazzById(@Param("id") Integer id, @Param("courseName") String courseName);

    List<Clazz> findAClazzByIds(@Param("id") Integer id, @Param("courseName") Integer courseId);

    // 根据课程名查找班级
    // TODO 不是，这个地方还是我写的，不敢改，但是如果我们能够保证课程绝不重名的话，这里应该返回Clazz类，而不是List
    List<Clazz> findClazzByCourseName(@Param("name") String name);

    /***/
    void insertClassCourse(@Param("classId") Integer classId, @Param("courseId") Integer courseId);

    // 根据班级id查找学生
    List<Student> findStudentsByClassId(@Param("id") Integer id);

    // 根据id删除班级
    void delete(@Param("id") Integer id);

    // 将学生退出相应的班级
    Integer deleteStudentByClassId(@Param("studentId") Integer studentId, @Param("classId") Integer classId);

    // 向班级添加学生
    void addStudent(@Param("class_id") Integer classId, @Param("student_id") Integer studentId);

    // 创建班级接口
    void insertClass(Clazz clazz);

    List<Clazz> findClazzByCourseId(Integer courseId);
}
